package repository

import (
	"context"

	"github.com/google/uuid"
	"techoiceness.com/aiagent/llm-gateway/internal/entity"
)

// LLMProviderRepository 大模型提供商仓库接口
type LLMProviderRepository interface {
	// 管理
	CreateProvider(ctx context.Context, provider *entity.LLMProvider) error
	UpdateProvider(ctx context.Context, provider *entity.LLMProvider) error
	DeleteProvider(ctx context.Context, id uuid.UUID) error

	// 查询单个
	GetProviderByID(ctx context.Context, id uuid.UUID) (*entity.LLMProvider, error)
	// 获取一个可用的 Provider，优先返回默认的，如果没有默认则返回第一个启用的
	GetAvailableProvider(ctx context.Context) (*entity.LLMProvider, error)

	// 查询列表
	QueryProviders(ctx context.Context, opts LLMProviderQueryOptions) (LLMProviderQueryResult, error)

	// 状态管理
	SetProviderDefault(ctx context.Context, id uuid.UUID, isDefault bool) error
	SetProviderEnabled(ctx context.Context, id uuid.UUID, isEnabled bool) error

	// 统计
	GetProviderCount(ctx context.Context) (int64, error)
	GetProviderCountByType(ctx context.Context, providerType string) (int64, error)
}

// LLMProviderQueryOptions 用于统一查询条件和分页参数
type LLMProviderQueryOptions struct {
	ProviderType string // 提供商类型，可选
	IsEnabled    *bool  // 是否启用，可选
	IsDefault    *bool  // 是否为默认，可选
	PageSize     int    // 分页大小
	Page         int    // 页码
}

type LLMProviderQueryResult struct {
	Providers []entity.LLMProvider
	Total     int64
	TotalPage int64
	Page      int
	PageSize  int
}
